home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 1 / Meeting Pearls Vol 1 (1994).iso / amok98-106 / amok98 / programminginoberon / calendar.mod next >
Text File  |  1993-10-07  |  822b  |  43 lines

  1. MODULE Calendar;
  2. (* Simulation Calendar, page 164 *)
  3. CONST  deadlock* = MAX(INTEGER); 
  4. TYPE
  5.     Event = POINTER TO EventDesc;
  6.     EventDesc = RECORD
  7.         id: INTEGER;
  8.         time: REAL;
  9.         next: Event
  10.     END;
  11.  
  12. VAR clndr: Event;  
  13.  
  14. PROCEDURE GetNextEvent*(VAR id: INTEGER; VAR t: REAL);
  15. BEGIN
  16.     IF clndr # NIL THEN 
  17.         id := clndr.id;  t := clndr.time;
  18.         clndr := clndr.next
  19.     ELSE id := deadlock
  20.     END
  21. END GetNextEvent;
  22.  
  23. PROCEDURE Schedule* (id: INTEGER; t: REAL);
  24. VAR x, y: Event;
  25. BEGIN
  26.     NEW(x);  x.id := id;  x.time := t;
  27.     IF (clndr = NIL) OR (t < clndr.time) THEN
  28.         x.next := clndr;  clndr := x
  29.     ELSE
  30.         y := clndr;
  31.         WHILE (y.next # NIL) & (t >= y.time) DO  y := y.next  END;
  32.         x.next := y.next;  y.next := x
  33.     END
  34. END Schedule;
  35.  
  36. PROCEDURE Reset*;
  37. BEGIN  clndr := NIL
  38. END Reset;
  39.  
  40. BEGIN  
  41.     Reset
  42. END Calendar.    (* Copyright M. Reiser, 1992 *)
  43.